/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package hoja4;


/**
 *
 * @param <E> 
 * @author Nery Giron, Adrian Martinez, Maria Fernanda Martinez, Darwin Rivas
 */
public class StackList<E> extends AbstractStack<E> {
    
    /**
     * 
     */
    protected List<E> data;
    
    /**
     * Nombre: StackList
     * Descipción: genera una nueva lista del tipo que indica op
     * Pre: op no es null
     * Post: nueva pila vacia
     * No hay valor de retorno
     * @param op de tipo String
     */
    public StackList(String op){
        switch (op) {
            case "S":
                data = new SinglyLinkedList<>();
                break;
            case "D":
                data = new DoublyLinkedList<>();
                break;
            case "C":
                data = new CircularList<>();
                break;
        }

    }

    /**
     * Nombre: push
     * Descripcion: agrega un objeto a la pila
     * Pre: espacio disponible
     * Post: item agregado a la pila
     * @param item de tipo E
     * Valor de retorno: ninguno
     */
    @Override
    public void push(E item) {
        data.addFirst(item);
    }

    /**
     * Nombre: pop
     * Descripcion: el objeto que entro de ultimo a la pila es retirado de ella
     * Pre: hay item en la pila
     * Post: item removido de la pila
     * Parametros: ninguno
     * @return valor tipo E
     */
    @Override
    public E pop() {
        return data.removeFirst();
    }

    /**
     * Nombre: peek
     * Descripcion: muestra el ultimo valor que ingreso a la pila
     * Pre: hay item en la pila
     * Post: muestra item
     * Parametros: ninguno
     * @return valor tipo E
     */
    @Override
    public E peek() {
        return data.getFirst();
    }

    /**
     * Nombre: size
     * Descripcion: obtiene la cantidad de elementos presentes en la pila
     * Pre: ninguno
     * Post: regresa la cantidad de elementos en la pila
     * Parametros: ninguno
     * @return valor tipo int
     */
    @Override
    public int size() {
        return data.size();
    }

    /**
     * Nombre: clear
     * Descripcion: saca todos los elementos de la pila
     * Pre: ninguno
     * Post: pila vacia
     * Parametros: ninguno
     * Valor de retorno: ninguno
     */
    @Override
    public void clear() {
        data.clear();
    }
}
